package com.krisyu.chainOfResponsibility.COR2;

import com.krisyu.chainOfResponsibility.COR2.IWomen;

/**
 * @DATE 2022/1/5
 * @Author KrisYu
 * @Description
 */

/**
 * IWomen接口不变，将抽象处理类稍作修改：
 *  1、设置处理类的处理级别，并针对不同身份进行枚举级别
 *  2、添加下一任处理者依赖
 *  3、在处理请求方法中，针对符合处理级别的妇女作出响应response，不符合，交给下一任处理者（如果存在）
 */
public abstract class Handler {
    public final static int FATHER_LEVEL_REQUEST = 1;
    public final static int HUSBAND_LEVEL_REQUEST = 2;
    public final static int SON_LEVEL_REQUEST = 3;
    // 能处理的级别
    private int level = 0;

    // 责任传递，下一个责任人是谁
    private Handler nextHandler;
    // 每个类都要说明一下自己能够处理哪些请求
    public Handler(int _level){
        this.level = _level;
    }
    // 处理请求
    public final void handlerMessage(IWomen women){
        if(women.getType() == this.level){
            this.response(women);
        }else{
            // 如果妇女类别是当前能够处理的请求级别不符合，交给下一级处理者
            if(this.nextHandler != null ){
                nextHandler.handlerMessage(women);
            }else{
                System.out.println("\n-------------无人能够处理该请求，按不同意处理---------------\n");
            }
        }
    }
    // 设置下一级处理者
    public void setNextHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }
    // 级别符合，处理妇女的请求
    protected abstract void response(IWomen women);
}
